﻿/**
 * 百度地图API证书错误修复方案
 * 解决 ERR_CERT_DATE_INVALID 错误
 */

(function() {
    'use strict';
    
    // 检查是否已经加载了百度地图API
    if (typeof BMap !== 'undefined') {
        return;
    }
    
    // 修复百度地图API的证书问题
    function fixBaiduMapCertError() {
        // 1. 拦截百度地图的网络请求，使用HTTP替代HTTPS
        if (typeof BMap !== 'undefined' && BMap.Map) {
            // 重写百度地图的瓦片请求URL
            var originalGetTileUrl = BMap.TileLayer.prototype.getTileUrl;
            if (originalGetTileUrl) {
                BMap.TileLayer.prototype.getTileUrl = function(tileCoord, zoom) {
                    var url = originalGetTileUrl.call(this, tileCoord, zoom);
                    if (url && url.indexOf('https://') === 0) {
                        // 将HTTPS替换为HTTP，避免证书错误
                        url = url.replace('https://', 'http://');
                    }
                    return url;
                };
            }
        }
        
        // 2. 修复地图服务请求
        if (typeof BMap !== 'undefined' && BMap.Geocoder) {
            var originalGeocode = BMap.Geocoder.prototype.getPoint;
            if (originalGeocode) {
                BMap.Geocoder.prototype.getPoint = function(address, callback, city) {
                    try {
                        return originalGeocode.call(this, address, callback, city);
                    } catch (e) {
                        if (callback) {
                            callback(null);
                        }
                    }
                };
            }
        }
    }
    
    // 3. 提供备用的地图初始化方案
    window.initBaiduMapWithFallback = function(containerId, options) {
        options = options || {};
        var defaultOptions = {
            center: new BMap.Point(116.404, 39.915), // 默认北京
            zoom: 15,
            enableScrollWheelZoom: true
        };
        
        // 合并选项
        for (var key in options) {
            defaultOptions[key] = options[key];
        }
        
        try {
            var map = new BMap.Map(containerId);
            map.centerAndZoom(defaultOptions.center, defaultOptions.zoom);
            
            if (defaultOptions.enableScrollWheelZoom) {
                map.enableScrollWheelZoom();
            }
            
            // 添加控件
            map.addControl(new BMap.NavigationControl());
            map.addControl(new BMap.ScaleControl());
            map.addControl(new BMap.OverviewMapControl());
            
            return map;
        } catch (e) {
            // 显示错误提示
            var container = document.getElementById(containerId);
            if (container) {
                container.innerHTML = 
                    '<div style="display: flex; align-items: center; justify-content: center; height: 100%; background: #f5f5f5; border: 1px solid #ddd; color: #666;">' +
                    '<div style="text-align: center;">' +
                    '<i class="fa fa-map-o" style="font-size: 48px; margin-bottom: 10px; color: #ccc;"></i><br>' +
                    '<strong>地图服务暂时不可用</strong><br>' +
                    '<small>请稍后重试或手动输入经纬度</small>' +
                    '</div>' +
                    '</div>';
            }
            
            return null;
        }
    };
    
    // 4. 提供经纬度输入的辅助功能
    window.setupCoordinateInput = function(longitudeInputId, latitudeInputId, addressInputId) {
        var longitudeInput = document.getElementById(longitudeInputId);
        var latitudeInput = document.getElementById(latitudeInputId);
        var addressInput = document.getElementById(addressInputId);
        
        if (!longitudeInput || !latitudeInput) {
            return;
        }
        
        // 添加输入验证
        function validateCoordinate(input, min, max, name) {
            input.addEventListener('blur', function() {
                var value = parseFloat(this.value);
                if (isNaN(value) || value < min || value > max) {
                    this.style.borderColor = '#d9534f';
                    this.title = name + '范围应在 ' + min + ' 到 ' + max + ' 之间';
                } else {
                    this.style.borderColor = '#5cb85c';
                    this.title = '';
                }
            });
        }
        
        validateCoordinate(longitudeInput, -180, 180, '经度');
        validateCoordinate(latitudeInput, -90, 90, '纬度');
        
        // 添加地址解析功能（如果地址输入框存在）
        if (addressInput && typeof BMap !== 'undefined') {
            var geocoder = new BMap.Geocoder();
            
            addressInput.addEventListener('blur', function() {
                var address = this.value.trim();
                if (address) {
                    geocoder.getPoint(address, function(point) {
                        if (point) {
                            longitudeInput.value = point.lng.toFixed(6);
                            latitudeInput.value = point.lat.toFixed(6);
                            longitudeInput.style.borderColor = '#5cb85c';
                            latitudeInput.style.borderColor = '#5cb85c';
                        }
                    });
                }
            });
        }
    };
    
    // 5. 在百度地图API加载完成后执行修复
    window.addEventListener('load', function() {
        setTimeout(function() {
            if (typeof BMap !== 'undefined') {
                fixBaiduMapCertError();
            }
        }, 1000);
    });
    
    // 6. 提供手动修复函数
    window.fixBaiduMapErrors = function() {
        fixBaiduMapCertError();
    };
    
})();

// 7. 全局错误处理
window.addEventListener('error', function(e) {
    if (e.message && e.message.indexOf('baidu') !== -1) {
        e.preventDefault();
    }
});

// 8. Promise错误处理
window.addEventListener('unhandledrejection', function(e) {
    if (e.reason && e.reason.toString().indexOf('baidu') !== -1) {
        e.preventDefault();
    }
});